release(v0.20.0): 知识完备性 — Vault 图遍历 / 历史追踪 / 检索质量 / Block 引用#39
Merged
Conversation
- VaultClient trait 扩展 build_vault_graph(note_id, depth) 支持 BFS 子图遍历 - build_vault_graph 优先从 SQLite (outgoing_links) 构建,避免每次全量磁盘扫描 - devkit_vault_graph MCP tool 新增 note_id / depth 参数(1-3 跳双向遍历) - fix(scanner): frontmatter repo 字段从 extra 哈希表读取改为 fm.repo 顶级字段 - 新增 test_vault_graph_bfs_traversal 验证 1 跳/2 跳邻居提取 - Sprint C 最小化:OpLog 查询打印耗时(ms) 447 tests pass
- New vault/history.rs: note_history() + note_diff() using git2 - VaultClient trait + AppContext: get_vault_history() returns commit timeline - New MCP tool: devkit_vault_history (67th tool) with author/timestamp/insertions/deletions - CLI: command - Tests: unit tests for history module + MCP tool integration test - Fix: vault/scanner repo frontmatter parsing (fm.repo not extra.get) 450 tests pass
- commands/skill.rs: 移除硬编码 C:\Users\22414\.clarity 路径,改为通用 output_dir 参数
- main.rs: SkillCommands::Sync { target } → Sync { output_dir }
- skill_runtime/clarity_sync.rs:
- 新增 sync_skills_to_plans() 通用接口(不硬编码子目录)
- 保留 sync_skills_to_clarity() 向后兼容包装
- 测试同步更新为调用新接口
- scripts/: devbase-claude.ps1 移至 scripts/claude/(第三方客户端适配示例)
- vault/mod.rs: 修复 clippy warning (.clamp() 替代 .max().min())
- commands/knowledge.rs: 修复临时值生命周期编译错误
450 tests pass
- 明确核心能力不依赖特定 AI 客户端 - 区分核心能力与客户端适配层边界 - 禁止硬编码客户端路径/API/配置格式
- search/hybrid.rs: - 新增 HybridSearchMetrics 结构体(latency_ms, keyword_recall, vector_recall, rrf_overlap, keyword_source, rrf_k) - 新增 keyword_search_symbols_with_source() 返回后端来源(tantivy/sqlite_fallback) - 新增 hybrid_search_symbols_with_metrics() 返回结果+诊断指标 - 原有 hybrid_search_symbols() 保持向后兼容,内部调用 with_metrics 并丢弃指标 - 新增 test_hybrid_search_symbols_with_metrics 测试 - registry/knowledge.rs: 新增 WorkspaceRegistry::hybrid_search_symbols_with_metrics() 包装 - mcp/tools/search.rs: 新增 DevkitSearchQualityTool(第68个 MCP tool) - 输入: repo_id, query_text, query_embedding(可选), limit - 输出: latency_ms, keyword_recall, vector_recall, rrf_overlap, keyword_source, rrf_k - mcp/mod.rs: 注册 SearchQuality tool(6处) - mcp/tests.rs: tool count 67→68,新增 devkit_search_quality 存在性断言 451 tests pass
- crates/devbase-vault-wikilink: - WikiLink 新增 anchor 字段 - parse_link 支持 [[note#heading]] 和 [[note#^block-id]] 语法 - 保留 [[note|display]] 和 [[note#heading|display]] 兼容 - 新增 3 个测试覆盖 heading/block-id/alias 组合 - registry.rs: VaultNote 新增 block_refs 字段 - registry/vault.rs: save/list/get 支持 block_refs JSON 序列化/反序列化 - vault/scanner.rs: scan 时从 wikilinks 提取 anchor 存入 block_refs - vault/export.rs: - 第一遍扫描提取所有文档 headings - 第二遍扫描检测 broken block refs(target 存在但 heading 不存在) - 返回结果新增 broken_block_refs 统计 - commands/knowledge.rs: CLI export 输出 broken_block_refs 计数 - 批量修复所有 VaultNote struct literal 测试 fixture 451 tests pass
- search/hybrid.rs: - 新增 2 个 #[ignore] 性能回归测试(1k/10k docs) - 红线: keyword search < 200ms @ 1k, < 500ms @ 10k - docs/adr/redis-cache.md: - 评估结论: 拒绝引入 Redis - 理由: 单用户本地场景下 SQLite+Tantivy 已满足 P99<200ms - 替代方案: Tantivy reader 预热、SQLite cache_size、Vault graph 内存缓存 - Cargo.toml: 移除 criterion search_bench(Windows release 锁定冲突) 451 tests pass (5 ignored for perf regression)
- ROADMAP: 阶段十一 v0.20.0 发布,Sprint E/F/G/C 全部标记完成 - README: 版本号 v0.18.0→v0.20.0,tests 437→451,tools 64→68 - README: 新增 Vault 深度能力(history/graph/export/block-ref) - README: 新增可观测性能力(search_quality, index_health) - AGENTS: 版本号 v0.19.0-dev→v0.20.0,tools 65→68,tests 446→451 - AGENTS: 新增 v0.20.0 完成里程碑(BFS 图遍历、Git 历史、SearchQuality、Block 引用、性能基线、Client-Agnostic) - AGENTS: 技术债更新(Vault 无版本历史→已解决,tree-sitter/flags→绿色)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
v0.20.0 Release
Sprint E — Vault 历史追踪
Sprint F — 检索质量监控
Sprint G — Block 引用
Sprint C — 性能基线
Sprint H — Release Hardening
架构原则
running 456 tests
test arxiv::tests::test_parse_arxiv_atom_invalid_xml ... ok
test arxiv::tests::test_parse_arxiv_atom_missing_title ... ok
test arxiv::tests::test_parse_arxiv_atom_no_authors ... ok
test arxiv::tests::test_parse_arxiv_atom_success ... ok
test asyncgit::tests::test_async_notification_variants ... ok
test asyncgit::tests::test_async_repo_status_clone ... ok
test asyncgit::tests::test_async_single_job_new ... ok
test asyncgit::tests::test_repo_status_notification_clone ... ok
test asyncgit::tests::test_sync_progress_notification_clone ... ok
test backup::tests::test_backup_filename_contains_timestamp ... ok
test backup::tests::test_backup_filename_format ... ok
test backup::tests::test_clean_old_backups_removes_oldest ... ok
test backup::tests::test_export_sqlite_creates_file ... ok
test config::tests::test_config_custom_values ... ok
test config::tests::test_config_default ... ok
test config::tests::test_config_empty_uses_defaults ... ok
test config::tests::test_config_serialize_roundtrip ... ok
test daemon::tests::test_daemon_new ... ok
test dependency_graph::tests::test_parse_cargo_toml_deps ... ok
test dependency_graph::tests::test_parse_cmake_add_subdirectory_local ... ok
test dependency_graph::tests::test_parse_cmake_fetchcontent_declare ... ok
test dependency_graph::tests::test_parse_cmake_find_package ... ok
test dependency_graph::tests::test_parse_cmake_target_link_libraries ... ok
test dependency_graph::tests::test_parse_go_mod_deps ... ok
test dependency_graph::tests::test_parse_package_json_deps ... ok
test dependency_graph::tests::test_parse_pyproject_toml_deps ... ok
test dependency_graph::tests::test_parse_requirements_txt_deps ... ok
test digest::tests::test_generate_daily_digest_empty ... ok
test digest::tests::test_generate_daily_digest_with_repos ... ok
test digest::tests::test_generate_daily_digest_with_unhealthy_repo ... ok
test discovery_engine::tests::test_discover_dependencies_cargo ... ok
test discovery_engine::tests::test_discover_dependencies_go_mod ... ok
test discovery_engine::tests::test_discover_dependencies_no_manifest ... ok
test discovery_engine::tests::test_discover_dependencies_package_json ... ok
test discovery_engine::tests::test_discover_similar_projects ... ok
test discovery_engine::tests::test_normalize_dep_name ... ok
test health::tests::test_compute_workspace_hash_changes_with_content ... ok
test health::tests::test_compute_workspace_hash_empty_dir ... ok
test health::tests::test_compute_workspace_hash_ignores_dirs ... ok
test health::tests::test_fmt_version_bun ... ok
test health::tests::test_fmt_version_cargo ... ok
test health::tests::test_fmt_version_cmake ... ok
test health::tests::test_fmt_version_docker ... ok
test health::tests::test_fmt_version_go ... ok
test health::tests::test_fmt_version_java ... ok
test health::tests::test_fmt_version_python ... ok
test health::tests::test_fmt_version_rustc ... ok
test health::tests::test_fmt_version_single_word ... ok
test health::tests::test_fmt_version_unknown ... ok
test i18n::en::tests::test_build ... ok
test i18n::tests::test_en_build ... ok
test i18n::tests::test_format_template_basic ... ok
test i18n::tests::test_format_template_extra_args_ignored ... ok
test i18n::tests::test_format_template_multiple ... ok
test i18n::tests::test_format_template_no_placeholder ... ok
test i18n::tests::test_from_language_en ... ok
test i18n::tests::test_log_strings_loaded_repos ... ok
test i18n::tests::test_log_strings_status_fmt ... ok
test i18n::tests::test_zh_build ... ok
test i18n::zh_cn::tests::test_build ... ok
test knowledge_engine::index::tests::test_prepare_repos_empty_path_returns_all ... ok
test knowledge_engine::index::tests::test_prepare_repos_matching_path_returns_one ... ok
test knowledge_engine::index::tests::test_prepare_repos_nonexistent_path_errors ... ok
test knowledge_engine::index::tests::test_prepare_repos_unregistered_existing_path_auto_registers ... ok
test knowledge_engine::index::tests::test_save_and_get_repo_index_state ... ok
test knowledge_engine::index_state::tests::test_get_repo_index_state_fresh ... ok
test knowledge_engine::index_state::tests::test_get_repo_index_state_missing ... ok
test knowledge_engine::index_state::tests::test_get_repo_index_state_stale ... ok
test knowledge_engine::index_state::tests::test_get_repo_index_state_unknown_not_git ... ok
test knowledge_engine::index_state::tests::test_index_state_is_fresh_and_changed_count ... ok
test knowledge_engine::index_state::tests::test_index_state_variants_serialize ... ok
test knowledge_engine::readme::tests::test_build_llm_prompt_contains_json_instruction ... ok
test knowledge_engine::readme::tests::test_extract_module_structure_for_devbase ... ok
test knowledge_engine::readme::tests::test_extract_module_structure_non_rust ... ok
test knowledge_engine::readme::tests::test_extract_readme_summary_basic ... ok
test knowledge_engine::readme::tests::test_extract_readme_summary_truncates_at_sentence ... ok
test knowledge_engine::readme::tests::test_extract_readme_summary_with_badges ... ok
test knowledge_engine::readme::tests::test_fallback_summary_cargo_toml ... ok
test knowledge_engine::readme::tests::test_module_info_clone ... ok
test knowledge_engine::readme::tests::test_parse_llm_json_markdown_fenced ... ok
test knowledge_engine::readme::tests::test_parse_llm_json_valid ... ok
test knowledge_engine::readme::tests::test_real_gitui_repo ... ignored, integration test on real gitui repo
test knowledge_engine::readme::tests::test_real_syncthing_repo ... ignored, integration test on real syncthing repo
test knowledge_engine::readme::tests::test_try_llm_summary_disabled_returns_none ... ok
test mcp::tests::test_destructive_gate_disabled_by_default ... ok
test mcp::tests::test_destructive_gate_enabled ... ok
test mcp::tests::test_format_mcp_message ... ok
test mcp::tests::test_initialize ... ok
test mcp::tests::test_nl_filter_repos_empty_query_returns_empty ... ok
test mcp::tests::test_nl_filter_repos_fallback_finds_by_language ... ok
test mcp::tests::test_nl_filter_repos_tantivy_finds_devbase ... ok
test mcp::tests::test_parse_tool_tiers ... ok
test mcp::tests::test_parse_tool_tiers_empty ... ok
test mcp::tests::test_stdio_content_length_format ... ok
test mcp::tests::test_tools_call_devkit_arxiv_fetch ... ok
test mcp::tests::test_tools_call_devkit_health ... ok
test mcp::tests::test_tools_call_devkit_project_context ... ok
test mcp::tests::test_tools_call_devkit_query ... ok
test mcp::tests::test_tools_call_devkit_skill_discover ... ok
test mcp::tests::test_tools_call_devkit_skill_list ... ok
test mcp::tests::test_tools_call_devkit_skill_run ... ignored, requires knowledge-report skill installed and may run external Python process
test mcp::tests::test_tools_call_devkit_skill_search ... ok
test mcp::tests::test_tools_call_unknown_tool ... ok
test mcp::tests::test_tools_list ... ok
test mcp::tests::test_unknown_method ... ok
test mcp::tools::brief::tests::test_name ... ok
test mcp::tools::context::tests::test_collect_hot_files_basic ... ok
test mcp::tools::context::tests::test_collect_hot_files_empty_repo ... ok
test mcp::tools::context::tests::test_collect_hot_files_no_git ... ok
test mcp::tools::context::tests::test_collect_recent_commits_basic ... ok
test mcp::tools::context::tests::test_collect_recent_commits_empty_repo ... ok
test mcp::tools::context::tests::test_collect_recent_commits_limit ... ok
test mcp::tools::context::tests::test_name ... ok
test mcp::tools::context::tests::test_schema_is_object ... ok
test mcp::tools::evaluate::tests::test_evaluate_tool_name ... ok
test mcp::tools::evaluate::tests::test_truncate_output ... ok
test mcp::tools::impact::tests::test_name ... ok
test mcp::tools::known_limit::tests::test_name ... ok
test mcp::tools::known_limit::tests::test_schema_is_object ... ok
test mcp::tools::oplog::tests::test_name ... ok
test mcp::tools::oplog::tests::test_schema_is_object ... ok
test mcp::tools::query::tests::test_name ... ok
test mcp::tools::query::tests::test_schema_is_object ... ok
test mcp::tools::relations::tests::test_relation_query_bidirectional ... ok
test mcp::tools::relations::tests::test_relation_store_and_query_roundtrip ... ok
test mcp::tools::relations::tests::test_relation_store_missing_required_fields ... ok
test mcp::tools::repo::tests::test_extract_tag_from_query ... ok
test mcp::tools::repo::tests::test_parse_github_repo_https ... ok
test mcp::tools::repo::tests::test_parse_github_repo_invalid ... ok
test mcp::tools::repo::tests::test_parse_github_repo_ssh ... ok
test mcp::tools::repo::tests::test_parse_stars_condition ... ok
test mcp::tools::search::tests::test_parse_f32_array ... ok
test mcp::tools::session::tests::test_schemas_are_objects ... ok
test mcp::tools::session::tests::test_session_tool_names ... ok
test mcp::tools::skill::tests::test_name ... ok
test mcp::tools::skill::tests::test_schema_is_object ... ok
test mcp::tools::tests::test_tool_modules_compile ... ok
test mcp::tools::vault::tests::test_resolve_vault_path_absolute_blocked ... ok
test mcp::tools::vault::tests::test_resolve_vault_path_dotdot_within_bounds ... ok
test mcp::tools::vault::tests::test_resolve_vault_path_empty ... ok
test mcp::tools::vault::tests::test_resolve_vault_path_nested ... ok
test mcp::tools::vault::tests::test_resolve_vault_path_normal ... ok
test mcp::tools::vault::tests::test_resolve_vault_path_performance ... ok
test mcp::tools::vault::tests::test_resolve_vault_path_traversal_blocked ... ok
test mcp::tools::vault::tests::test_resolve_vault_path_with_dot ... ok
test mcp::tools::vault::tests::test_vault_daily_appends_to_existing ... ok
test mcp::tools::vault::tests::test_vault_daily_creates_file ... ok
test mcp::tools::vault::tests::test_vault_graph_basic ... ok
test mcp::tools::vault::tests::test_vault_graph_bfs_traversal ... ok
test mcp::tools::vault::tests::test_vault_graph_filtered_by_repo ... ok
test mcp::tools::vault::tests::test_vault_history_tool ... ok
test mcp::tools::workflow::tests::test_workflow_list_empty_registry ... ok
test mcp::tools::workflow::tests::test_workflow_run_not_found ... ok
test mcp::tools::workflow::tests::test_workflow_status_invalid_id ... ok
test oplog_analytics::tests::test_generate_report_empty_db ... ok
test oplog_analytics::tests::test_generate_report_with_data ... ok
test query::tests::test_eval_behind_match ... ok
test query::tests::test_eval_behind_no_match ... ok
test query::tests::test_eval_keyword_match ... ok
test query::tests::test_eval_keyword_no_match ... ok
test query::tests::test_eval_note_match ... ok
test query::tests::test_eval_note_no_match ... ok
test query::tests::test_eval_stale_never_synced ... ok
test query::tests::test_eval_tag_match ... ok
test query::tests::test_eval_tag_no_match ... ok
test query::tests::test_parse_cmp_expr_empty ... ok
test query::tests::test_parse_cmp_expr_eq_implicit ... ok
test query::tests::test_parse_cmp_expr_gt ... ok
test query::tests::test_parse_query_behind ... ok
test query::tests::test_parse_query_keyword ... ok
test query::tests::test_parse_query_lang ... ok
test query::tests::test_parse_query_multiple ... ok
test query::tests::test_parse_query_note ... ok
test query::tests::test_parse_query_stale ... ok
test query::tests::test_parse_query_tag ... ok
test registry::agent_context::tests::test_cascade_delete ... ok
test registry::agent_context::tests::test_context_crud ... ok
test registry::agent_context::tests::test_entity_links ... ok
test registry::agent_context::tests::test_get_context_with_memories ... ok
test registry::agent_context::tests::test_memory_crud ... ok
test registry::agent_context::tests::test_missing_context ... ok
test registry::code_symbols::tests::test_query_code_symbols_by_file ... ok
test registry::code_symbols::tests::test_query_code_symbols_by_name ... ok
test registry::code_symbols::tests::test_query_code_symbols_by_symbol_type ... ok
test registry::code_symbols::tests::test_query_code_symbols_limit ... ok
test registry::code_symbols::tests::test_query_code_symbols_no_filter ... ok
test registry::dead_code::tests::test_query_dead_code_basic ... ok
test registry::dead_code::tests::test_query_dead_code_excludes_called ... ok
test registry::dead_code::tests::test_query_dead_code_excludes_main ... ok
test registry::dead_code::tests::test_query_dead_code_excludes_pub_when_not_include_pub ... ok
test registry::dead_code::tests::test_query_dead_code_excludes_test_attribute ... ok
test registry::dead_code::tests::test_query_dead_code_excludes_test_prefix ... ok
test registry::dead_code::tests::test_query_dead_code_excludes_tests_rs ... ok
test registry::knowledge::tests::test_cross_repo_search_symbols ... ok
test registry::knowledge::tests::test_find_papers_by_venue ... ok
test registry::knowledge::tests::test_find_related_symbols ... ok
test registry::knowledge::tests::test_module_crud ... ok
test registry::knowledge::tests::test_paper_roundtrip ... ok
test registry::knowledge::tests::test_save_embeddings ... ok
test registry::knowledge::tests::test_save_summary_smoke ... ok
test registry::knowledge::tests::test_semantic_search_symbols ... ok
test registry::knowledge::tests::test_symbol_read_tracking ... ok
test registry::knowledge_meta::tests::test_knowledge_meta_crud ... ok
test registry::known_limits::tests::test_known_limit_crud ... ok
test registry::known_limits::tests::test_list_known_limits_by_category ... ok
test registry::links::tests::test_get_linked_repos ... ok
test registry::links::tests::test_get_linked_repos_empty ... ok
test registry::links::tests::test_get_linked_repos_full ... ok
test registry::links::tests::test_get_linked_vault_notes ... ok
test registry::links::tests::test_get_linked_vaults ... ok
test registry::migrate::tests::test_db_path_format ... ok
test registry::migrate::tests::test_workspace_dir_format ... ok
test registry::repo::tests::test_list_repos_empty ... ok
test registry::repo::tests::test_list_repos_need_index ... ok
test registry::repo::tests::test_list_repos_stale_health ... ok
test registry::repo::tests::test_list_workspaces_by_tier ... ok
test registry::repo::tests::test_save_and_list_repo ... ok
test registry::repo::tests::test_save_repo_updates_existing ... ok
test registry::repo::tests::test_save_repo_with_remotes ... ok
test registry::repo::tests::test_save_repo_with_stars ... ok
test registry::repo::tests::test_save_repo_with_tags ... ok
test registry::repo::tests::test_update_repo_language ... ok
test registry::repo::tests::test_update_repo_last_synced_at ... ok
test registry::repo::tests::test_update_repo_tier ... ok
test registry::repo::tests::test_update_repo_workspace_type ... ok
test registry::repos_toml::tests::test_apply_overrides ... ok
test registry::repos_toml::tests::test_parse_repos_toml ... ok
test registry::test_helpers::tests::test_agent_contexts_table_exists ... ok
test registry::test_helpers::tests::test_agent_memories_table_exists ... ok
test registry::test_helpers::tests::test_in_memory_schema_version ... ok
test registry::test_helpers::tests::test_knowledge_meta_table_exists ... ok
test registry::test_helpers::tests::test_known_limits_table_exists ... ok
test registry::test_helpers::tests::test_workflow_executions_table_exists ... ok
test registry::tests::test_dead_code_excludes_pub_variants_and_main ... ok
test registry::tests::test_dead_code_include_pub ... ok
test registry::tests::test_oplog_event_type_roundtrip ... ok
test registry::tests::test_oplog_migration_compat ... ok
test registry::tests::test_oplog_save_and_list ... ok
test registry::tests::test_primary_remote_fallback_to_first ... ok
test registry::tests::test_primary_remote_none ... ok
test registry::tests::test_primary_remote_prefers_origin ... ok
test registry::tests::test_stars_cache_miss ... ok
test registry::tests::test_stars_cache_roundtrip ... ok
test registry::tests::test_stars_cache_update ... ok
test registry::vault::tests::test_delete_vault_note ... ok
test registry::vault::tests::test_list_vault_notes_empty ... ok
test registry::vault::tests::test_save_and_list_vault_note ... ok
test scan::tests::test_detect_language_cpp ... ok
test scan::tests::test_detect_language_go ... ok
test scan::tests::test_detect_language_node ... ok
test scan::tests::test_detect_language_none ... ok
test scan::tests::test_detect_language_python_pyproject ... ok
test scan::tests::test_detect_language_python_requirements ... ok
test scan::tests::test_detect_language_rust ... ok
test scan::tests::test_discover_repos_devbase_ignore ... ok
test scan::tests::test_discover_repos_excludes_paths ... ok
test scan::tests::test_discover_repos_excludes_patterns ... ok
test scan::tests::test_discover_repos_finds_non_git_workspaces ... ok
test scan::tests::test_inspect_non_git_workspace_generic ... ok
test scan::tests::test_inspect_non_git_workspace_openclaw ... ok
test scan::tests::test_is_excluded_path_sync_context ... ok
test scan::tests::test_is_nested_submodule_false ... ok
test scan::tests::test_is_nested_submodule_true ... ok
test scan::tests::test_normal_tags ... ok
test scan::tests::test_parse_github_owner_repo_https ... ok
test scan::tests::test_parse_github_owner_repo_invalid ... ok
test scan::tests::test_parse_github_owner_repo_non_github ... ok
test scan::tests::test_parse_github_owner_repo_ssh ... ok
test scan::tests::test_zip_snapshot_tags_main ... ok
test scan::tests::test_zip_snapshot_tags_master ... ok
test search::hybrid::tests::test_hybrid_search_fallback_to_keyword ... ok
test search::hybrid::tests::test_hybrid_search_symbols_with_metrics ... ok
test search::hybrid::tests::test_keyword_search_basic ... ok
test search::hybrid::tests::test_keyword_search_latency_regression_10k ... ignored, performance regression: run with --ignored to execute
test search::hybrid::tests::test_keyword_search_latency_regression_1k ... ignored, performance regression: run with --ignored to execute
test search::hybrid::tests::test_rrf_merge_empty_lists ... ok
test search::hybrid::tests::test_rrf_merge_single_list_passthrough ... ok
test search::hybrid::tests::test_rrf_merge_two_lists ... ok
test search::symbol_index::tests::test_add_and_search_symbol ... ok
test search::symbol_index::tests::test_delete_repo_symbols ... ok
test search::symbol_index::tests::test_search_signature_match ... ok
test search::tests::test_add_and_search_repo ... ok
test search::tests::test_add_vault_doc ... ok
test search::tests::test_build_schema ... ok
test search::tests::test_delete_repo_doc ... ok
test search::tests::test_index_is_empty ... ok
test search::tests::test_list_indexed_repo_ids ... ok
test search::tests::test_search_repos ... ok
test search::tests::test_search_vault ... ok
test search::tests::test_sync_index_to_db_removes_orphans ... ok
test semantic_index::git_diff::tests::test_current_head_hash_after_commit ... ok
test semantic_index::git_diff::tests::test_current_head_hash_empty_repo ... ok
test semantic_index::git_diff::tests::test_diff_since_deleted_file ... ok
test semantic_index::git_diff::tests::test_diff_since_no_changes ... ok
test semantic_index::git_diff::tests::test_diff_since_none_first_index ... ok
test semantic_index::git_diff::tests::test_diff_since_with_last_hash ... ok
test semantic_index::git_diff::tests::test_diff_since_workdir_modification ... ok
test semantic_index::git_diff::tests::test_diff_since_workdir_untracked ... ok
test semantic_index::persist::tests::test_delete_symbols_for_files ... ok
test semantic_index::persist::tests::test_save_calls_incremental ... ok
test semantic_index::persist::tests::test_save_calls_replaces_old ... ok
test semantic_index::persist::tests::test_save_symbols_incremental ... ok
test semantic_index::persist::tests::test_save_symbols_replaces_old ... ok
test semantic_index::symbol::tests::test_extract_rust_attributes ... ok
test semantic_index::tests::test_extract_go_const ... ok
test semantic_index::tests::test_extract_go_function ... ok
test semantic_index::tests::test_extract_go_method ... ok
test semantic_index::tests::test_extract_go_struct_and_interface ... ok
test semantic_index::tests::test_extract_js_function ... ok
test semantic_index::tests::test_extract_multiple_rust ... ok
test semantic_index::tests::test_extract_python_class ... ok
test semantic_index::tests::test_extract_python_function ... ok
test semantic_index::tests::test_extract_python_multiple ... ok
test semantic_index::tests::test_extract_rust_function ... ok
test semantic_index::tests::test_extract_rust_struct ... ok
test semantic_index::tests::test_extract_ts_class_and_interface ... ok
test semantic_index::tests::test_extract_ts_enum ... ok
test semantic_index::tests::test_index_repo_full ... ok
test semantic_index::tests::test_save_calls ... ok
test semantic_index::tests::test_save_symbols ... ok
test skill_runtime::clarity_sync::tests::test_conflict_resolution_skips_older_devbase_skill ... ok
test skill_runtime::clarity_sync::tests::test_conflict_resolution_updates_when_devbase_newer ... ok
test skill_runtime::clarity_sync::tests::test_sync_skills_to_clarity ... ok
test skill_runtime::dependency::tests::test_detect_cycle_direct ... ok
test skill_runtime::dependency::tests::test_detect_cycle_none ... ok
test skill_runtime::dependency::tests::test_resolve_cycle_fails ... ok
test skill_runtime::dependency::tests::test_resolve_topological_order ... ok
test skill_runtime::dependency::tests::test_validate_dependencies_all_satisfied ... ok
test skill_runtime::dependency::tests::test_validate_dependencies_missing ... ok
test skill_runtime::discover::tests::test_generate_entry_script_node ... ok
test skill_runtime::discover::tests::test_generate_entry_script_python ... ok
test skill_runtime::discover::tests::test_generate_entry_script_rust ... ok
test skill_runtime::discover::tests::test_generate_skill_md_structure ... ok
test skill_runtime::executor::tests::test_external_embedding_endpoint_error_response ... ok
test skill_runtime::executor::tests::test_external_embedding_endpoint_ollama_parsing ... ok
test skill_runtime::executor::tests::test_hard_veto_guard_empty_registry ... ok
test skill_runtime::executor::tests::test_hard_veto_guard_with_unresolved_vetoes ... ok
test skill_runtime::executor::tests::test_resolve_interpreter_binary ... ok
test skill_runtime::executor::tests::test_resolve_interpreter_powershell ... ok
test skill_runtime::executor::tests::test_resolve_interpreter_python ... ok
test skill_runtime::executor::tests::test_resolve_interpreter_shell ... ok
test skill_runtime::executor::tests::test_run_skill_not_found ... ok
test skill_runtime::executor::tests::test_run_skill_success ... ok
test skill_runtime::publish::tests::test_get_default_remote_fallback ... ok
test skill_runtime::publish::tests::test_get_default_remote_origin ... ok
test skill_runtime::publish::tests::test_push_tag_no_remote ... ok
test skill_runtime::publish::tests::test_push_tag_success_to_bare_remote ... ok
test skill_runtime::registry::tests::test_execution_tracking ... ok
test skill_runtime::registry::tests::test_install_and_get_skill ... ok
test skill_runtime::registry::tests::test_list_skills_by_type ... ok
test skill_runtime::registry::tests::test_search_skills_text ... ok
test skill_runtime::registry::tests::test_uninstall_skill ... ok
test skill_runtime::scoring::tests::test_calculate_scores ... ok
test skill_runtime::scoring::tests::test_recalculate_all ... ok
test skill_runtime::scoring::tests::test_recommend_skills ... ok
test skill_sync::tests::test_convert_to_skill ... ok
test skill_sync::tests::test_extract_description_long ... ok
test skill_sync::tests::test_extract_description_short ... ok
test skill_sync::tests::test_extract_description_skips_heading ... ok
test storage::tests::test_app_context_with_temp_storage ... ok
test storage::tests::test_repair_tantivy_consistency_detects_orphan ... ok
test sync::orchestrator::tests::test_sync_orchestrator_new ... ok
test sync::policy::tests::test_classify_sync_error ... ok
test sync::policy::tests::test_recommend_sync_action ... ok
test sync::policy::tests::test_sync_policy_capabilities ... ok
test sync::policy::tests::test_sync_policy_from_tags ... ok
test sync::tasks::tests::test_map_action_known ... ok
test sync::tasks::tests::test_map_action_unknown ... ok
test sync::tasks::tests::test_write_syncdone_marker ... ok
test sync::tests::test_assess_safety_blocked_dirty ... ok
test sync::tests::test_assess_safety_blocked_diverged_conservative ... ok
test sync::tests::test_assess_safety_diverged_rebase_allowed ... ok
test sync::tests::test_assess_safety_no_upstream ... ok
test sync::tests::test_assess_safety_safe_ff ... ok
test sync::tests::test_assess_safety_up_to_date ... ok
test sync::tests::test_collect_tasks_default_mode_excludes_untagged ... ok
test sync::tests::test_collect_tasks_default_mode_includes_known_tags ... ok
test sync::tests::test_collect_tasks_explicit_filter_includes_untagged ... ok
test sync::tests::test_map_action ... ok
test sync::tests::test_perform_merge_fast_forward ... ok
test sync::tests::test_perform_merge_up_to_date ... ok
test sync::tests::test_sync_repo_skip_no_syncdone ... ok
test sync::tests::test_write_syncdone_marker ... ok
test tui::event::tests::test_tui_action_variants ... ok
test tui::layout::tests::test_layout_centered ... ok
test tui::layout::tests::test_layout_compact ... ok
test tui::layout::tests::test_layout_inner ... ok
test tui::layout::tests::test_layout_standard ... ok
test tui::layout::tests::test_layout_wide ... ok
test tui::render::detail::tests::test_overview_status_desc ... ok
test tui::render::detail::tests::test_overview_status_icon ... ok
test tui::render::detail::tests::test_sync_policy_color ... ok
test tui::render::help::tests::test_help_section_empty ... ok
test tui::render::help::tests::test_help_section_with_bindings ... ok
test tui::render::list::tests::test_repo_status_fg ... ok
test tui::render::list::tests::test_repo_status_icon ... ok
test tui::render::logs::tests::test_format_log_line_plain ... ok
test tui::render::logs::tests::test_format_log_line_with_timestamp ... ok
test tui::render::popups::tests::test_search_results_title_empty ... ok
test tui::render::popups::tests::test_search_results_title_with_results ... ok
test tui::render::tests::test_read_repo_summary_found ... ok
test tui::render::tests::test_read_repo_summary_missing ... ok
test tui::render::tests::test_read_syncdone_info_missing ... ok
test tui::render::tests::test_read_syncdone_info_valid ... ok
test tui::state::tests::test_run_nlp_selected_skill_empty_results ... ok
test tui::tests::test_detail_tab_label ... ok
test tui::tests::test_main_view_toggle ... ok
test tui::tests::test_search_mode_label ... ok
test tui::tests::test_sort_mode_toggle ... ok
test tui::theme::tests::test_styles_from_dark_theme ... ok
test tui::theme::tests::test_theme_dark_colors ... ok
test tui::theme::tests::test_theme_default_is_dark ... ok
test tui::theme::tests::test_theme_light_colors ... ok
test vault::backlinks::tests::test_backlink_index_basic ... ok
test vault::fs_io::tests::test_read_note_body_with_frontmatter ... ok
test vault::fs_io::tests::test_read_note_body_without_frontmatter ... ok
test vault::fs_io::tests::test_read_note_content ... ok
test vault::fs_io::tests::test_read_note_content_missing ... ok
test vault::history::tests::test_note_history_basic ... ok
test vault::history::tests::test_note_history_not_git ... ok
test vault::indexer::tests::test_index_vault_note_core_add ... ok
test vault::indexer::tests::test_index_vault_note_core_update ... ok
test vault::indexer::tests::test_reindex_vault_core_empty ... ok
test vault::indexer::tests::test_reindex_vault_core_with_notes ... ok
test vault::scanner::tests::test_scan_vault_basic ... ok
test vault::scanner::tests::test_scan_vault_empty_dir ... ok
test vault::scanner::tests::test_scan_vault_missing_dir ... ok
test watch::tests::test_folder_scheduler_degrades_to_scan ... ok
test watch::tests::test_folder_scheduler_first_run ... ok
test watch::tests::test_folder_scheduler_incremental_no_change ... ok
test watch::tests::test_watch_aggregator_dedup ... ok
test workflow::executor::tests::test_condition_step_false ... ok
test workflow::executor::tests::test_condition_step_true ... ok
test workflow::executor::tests::test_loop_body_continue ... ok
test workflow::executor::tests::test_loop_body_fallback ... ok
test workflow::executor::tests::test_loop_empty_collection ... ok
test workflow::executor::tests::test_loop_failure ... ok
test workflow::executor::tests::test_loop_multi_iteration ... ok
test workflow::executor::tests::test_loop_single_iteration ... ok
test workflow::executor::tests::test_parallel_step ... ok
test workflow::executor::tests::test_subworkflow_step ... ok
test workflow::parser::tests::test_parse_basic_workflow ... ok
test workflow::parser::tests::test_parse_invalid_id ... ok
test workflow::scheduler::tests::test_linear_schedule ... ok
test workflow::scheduler::tests::test_parallel_schedule ... ok
test workflow::scheduler::tests::test_transitive_deps ... ok
test workflow::scheduler::tests::test_transitive_deps_leaf ... ok
test workflow::state::tests::test_create_and_update_execution ... ok
test workflow::state::tests::test_end_to_end_workflow_lifecycle ... ok
test workflow::state::tests::test_save_and_get_workflow ... ok
test workflow::validator::tests::test_cycle_detected ... ok
test workflow::validator::tests::test_loop_body_duplicate_global_id ... ok
test workflow::validator::tests::test_loop_body_missing_dep ... ok
test workflow::validator::tests::test_loop_body_valid ... ok
test workflow::validator::tests::test_missing_dep ... ok
test workflow::validator::tests::test_valid_dag ... ok
test result: ok. 451 passed; 0 failed; 5 ignored; 0 measured; 0 filtered out; finished in 11.48s
running 7 tests
test commands::limit::tests::test_run_limit_delete_not_found ... ok
test commands::limit::tests::test_run_limit_seed_and_list_json ... ok
test commands::simple::tests::test_run_vault_list_empty ... ok
test commands::skill::tests::test_run_skill_list_empty ... ok
test commands::skill::tests::test_run_skill_uninstall_not_found ... ok
test commands::workflow::tests::test_run_workflow_delete_not_found ... ok
test commands::workflow::tests::test_run_workflow_list_empty ... ok
test result: ok. 7 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.25s
running 11 tests
test test_backup_export ... ok
test test_health_empty_registry ... ok
test test_limit_add_and_list ... ok
test test_limit_list_empty ... ok
test test_registry_backups_empty ... ok
test test_scan_git_repo ... ok
test test_skill_discover ... ok
test test_skill_list_empty ... ok
test test_sync_skips_unmanaged_repo ... ok
test test_tag_enables_sync ... ok
test test_version ... ok
test result: ok. 11 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 1.06s
Testing save_repo
Success
Testing list_repos_500
Success
Testing get_health
Success
Testing format_mcp_message
Success
Testing index_repo_full/scale/small
Success
Testing index_repo_full/scale/medium
Success
Testing index_repo_full/scale/full
Success
Testing cosine_similarity/dim/128
Success
Testing cosine_similarity/dim/512
Success
Testing cosine_similarity/dim/768
Success
Testing extract_symbols/lang/rust
Success
Testing extract_symbols/lang/python
Success
Testing extract_symbols/lang/go
Success
Testing parse_cmake_lists/complex
Success
running 0 tests
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s 全绿